ConnectionConfiguration.java
package org.codefilarete.stalactite.sql;
import org.codefilarete.stalactite.engine.SeparateTransactionExecutor;
/**
* An abstraction for current JDBC connection configuration
*
* @author Guillaume Mary
*/
public interface ConnectionConfiguration {
ConnectionProvider getConnectionProvider();
/**
* Gives the JDBC batch size to use for write operations. Because Stalactite always uses batch, this value is mandatory.
* @return the JDBC batch size to use for write operations
*/
int getBatchSize();
/**
* Gives the JDBC fetch size to use for read operations. Optional, because JDBC drivers have their own.
* @return the JDBC fetch size to use for read operations
*/
Integer getFetchSize();
/**
* Default implementation of {@link ConnectionConfiguration} that keeps and gives values provided at instantiation time
*
* @author Guillaume Mary
*/
class ConnectionConfigurationSupport implements ConnectionConfiguration {
private final ConnectionProvider connectionProvider;
private final int batchSize;
private final Integer fetchSize;
public ConnectionConfigurationSupport(ConnectionProvider connectionProvider, int batchSize) {
this(connectionProvider, batchSize, null);
}
public ConnectionConfigurationSupport(ConnectionProvider connectionProvider, int batchSize, Integer fetchSize) {
this.connectionProvider = connectionProvider;
this.batchSize = batchSize;
this.fetchSize = fetchSize;
}
@Override
public ConnectionProvider getConnectionProvider() {
return connectionProvider;
}
@Override
public int getBatchSize() {
return batchSize;
}
@Override
public Integer getFetchSize() {
return fetchSize;
}
}
/**
* {@link ConnectionProvider} contract that fulfills {@link org.codefilarete.stalactite.engine.PersistenceContext} features
* - entity versioning (pessimistic lock)
* - transactional operations (for identifiers generated by {@link org.codefilarete.stalactite.mapping.id.sequence.hilo.PooledHiLoSequence})
*
* @author Guillaume Mary
*/
interface TransactionalConnectionProvider extends
TransactionObserver, // for InsertExecutor.VersioningStrategyRollbackListener
SeparateTransactionExecutor // for PooledHiLoSequence
{
}
}